const useKeepAliveStore = defineStore(
  // 唯一ID
  'keepAlive',
  () => {
    // 定义一个名为list的ref，用于存储需要缓存的组件名称
    const list = ref<string[]>([])

    // 添加需要缓存的组件名称
    function add(name: string | string[]) {
      if (typeof name === 'string') {
        // 如果name是字符串，则判断list中是否已经存在该组件名称，如果不存在则添加
        !list.value.includes(name) && list.value.push(name)
      }
      else {
        // 如果name是数组，则遍历数组，判断list中是否已经存在该组件名称，如果不存在则添加
        name.forEach((v) => {
          v && !list.value.includes(v) && list.value.push(v)
        })
      }
    }
    // 移除不需要缓存的组件名称
    function remove(name: string | string[]) {
      if (typeof name === 'string') {
        // 如果name是字符串，则从list中移除该组件名称
        list.value = list.value.filter((v) => {
          return v !== name
        })
      }
      else {
        // 如果name是数组，则从list中移除数组中的所有组件名称
        list.value = list.value.filter((v) => {
          return !name.includes(v)
        })
      }
    }
    // 清空list
    function clean() {
      list.value = []
    }

    // 返回需要暴露的属性和方法
    return {
      list,
      add,
      remove,
      clean,
    }
  },
)

// 导出useKeepAliveStore
export default useKeepAliveStore
